package com.lx.controller;

import com.lx.annotation.limit;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;



/**
 * 雒鑫
 */
@RestController
@RequestMapping("/user")
public class RateLimitController {
    /**
     * 接口防刷
     * @return
     * 实现思路：
     * 使用拦截器拦截所有的前端请求
     * 在springmvc提供的拦截器当中先判断当前的请求是不是一个方法 如果不是直接放行
     * 如果是 判断该方法上是否拥有一个接口防刷的注解 如果没有 也是直接放行
     * 如果有注解 获取它的的请求地址 与key进行拼接 充当redis当中的key值
     * 并且次数要自增一次 代表该接口是第一次请求
     * 然后再往下判断 该请求的次数是不是第一次 如果是 设置注解当中的规定时间内请求的有效次数
     * 然后再判断当前的请求次数是否超过了注解当中规定时间内的一个最大访问次数
     * 如果超过了 就需要拦截这次请求 不能通行
     * 否则直接放行
     */
    @limit(timeOut=10,sum =2,msg = "ok")//10s秒钟最大的访问次数为4次
    @RequestMapping("/get")
    public String rd() {
        System.out.println("成功");
        return "当前请求没有超过最大限制次数，请求发送成功";
    }


    @limit(timeOut = 10,sum = 3,msg = "msg")
    @GetMapping("/test")
    public void test(){
        System.out.println(11111);
    }
}
